import { h } from 'vue';
import { Avatar, Tag, Tooltip } from 'ant-design-vue';
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
import { Tinymce } from '/@/components/Tinymce';
import Icon from '/@/components/Icon';
import { getDictItemsByCode } from '/@/utils/dict/index';
import { filterMultiDictText } from '/@/utils/dict/JDictSelectUtil.js';
import { isEmpty } from '/@/utils/is';
import { useMessage } from '/@/hooks/web/useMessage';
import { getDictItems } from "/@/api/common/api";
const { createMessage } = useMessage();
const render = {
    /**
     * 渲染列表头像
     */
    renderAvatar: ({ record }) => {
        if (record.avatar) {
            let avatarList = record.avatar.split(',');
            return h('span', avatarList.map((item) => {
                return h(Avatar, {
                    src: getFileAccessHttpUrl(item),
                    shape: 'square',
                    size: 'default',
                    style: { marginRight: '5px' },
                });
            }));
        }
        else {
            return h(Avatar, { shape: 'square', size: 'default' }, {
                icon: () => h(Icon, { icon: 'ant-design:file-image-outlined', size: 30 }),
            });
        }
    },
    /**
     * 根据字典编码 渲染（缓存）
     * @param v 值
     * @param code 字典编码
     * @param renderTag 是否使用tag渲染
     */
    renderDict: (v, code, renderTag = false) => {
        let text = '';
        let array = getDictItemsByCode(code) || [];
        let obj = array.filter((item) => {
            return item.value == v;
        });
        if (obj.length > 0) {
            text = obj[0].text;
        }
        return isEmpty(text) || !renderTag ? h('span', text) : h(Tag, text);
    },
    /**
     * 根据字典编码 渲染（数据库）
     * @param v 值
     * @param code 字典编码
     * @param renderTag 是否使用tag渲染
     */
    renderDictItem: (v, code, renderTag = false) => {
        getDictItems(code).then((res) => {
            if (res) {
                let text = '';
                let array = res.map((item) => ({ value: item.value, text: item.text }));
                let obj = array.filter((item) => {
                    return item.value == v;
                });
                if (obj.length > 0) {
                    text = obj[0].text;
                }
                return isEmpty(text) || !renderTag ? h('span', text) : h(Tag, text);
            }
            else {
                return '';
            }
        });
    },
    /**
     * 渲染图片
     * @param text
     */
    renderImage: ({ text }) => {
        if (!text) {
            //update-begin-author:taoyan date:2022-5-24 for:  VUEN-1084 【vue3】online表单测试发现的新问题 41、生成的代码，树默认图大小未改
            return h(Avatar, { shape: 'square', size: 25 }, {
                icon: () => h(Icon, { icon: 'ant-design:file-image-outlined', size: 25 }),
            });
        }
        let avatarList = text.split(',');
        return h('span', avatarList.map((item) => {
            return h(Avatar, {
                src: getFileAccessHttpUrl(item),
                shape: 'square',
                size: 25,
                style: { marginRight: '5px' },
            });
        }));
        //update-end-author:taoyan date:2022-5-24 for:  VUEN-1084 【vue3】online表单测试发现的新问题 41、生成的代码，树默认图大小未改
    },
    /**
     * 渲染 Tooltip
     * @param text
     * @param len
     */
    renderTip: (text, len = 20) => {
        if (text) {
            let showText = text + '';
            if (showText.length > len) {
                showText = showText.substr(0, len) + '...';
            }
            return h(Tooltip, { title: text }, () => showText);
        }
        return text;
    },
    /**
     * 渲染a标签
     * @param text
     */
    renderHref: ({ text }) => {
        if (!text) {
            return '';
        }
        const len = 20;
        if (text.length > len) {
            text = text.substr(0, len);
        }
        return h('a', { href: text, target: '_blank' }, text);
    },
    /**
     * 根据字典渲染
     * @param v
     * @param array
     */
    renderDictNative: (v, array, renderTag = false) => {
        let text = '';
        let color = '';
        let obj = array.filter((item) => {
            return item.value == v;
        });
        if (obj.length > 0) {
            text = obj[0].label;
            color = obj[0].color;
        }
        return isEmpty(text) || !renderTag ? h('span', text) : h(Tag, { color }, () => text);
    },
    /**
     * 渲染富文本
     */
    renderTinymce: ({ model, field }) => {
        return h(Tinymce, {
            showImageUpload: false,
            height: 300,
            value: model[field],
            onChange: (value) => {
                model[field] = value;
            },
        });
    },
    renderSwitch: (text, arr) => {
        return text ? filterMultiDictText(arr, text) : '';
    },
    renderCategoryTree: (text, code) => {
        let array = getDictItemsByCode(code);
        return filterMultiDictText(array, text);
    },
    renderTag(text, color) {
        return isEmpty(text) ? h('span', text) : h(Tag, { color }, () => text);
    },
};
/**
 * 文件下载
 */
function downloadFile(url) {
    if (!url) {
        createMessage.warning('未知的文件');
        return;
    }
    if (url.indexOf(',') > 0) {
        url = url.substring(0, url.indexOf(','));
    }
    url = getFileAccessHttpUrl(url.split(',')[0]);
    if (url) {
        window.open(url, '_blank');
    }
}
/**
 * 远程服务器下载（未实现）
 * @param url
 */
// function downloadAttach(url) {
//   url = getFileAccessHttpUrl(url.split(',')[0]);
//   downloadFiles({file: url});
// }
/**
 * 文件预览
 * @param url
 */
function viewFile(url) {
    if (!url) {
        createMessage.warning('未知的文件');
        return;
    }
    if (url.indexOf(',') > 0) {
        url = url.substring(0, url.indexOf(','));
    }
    url = getFileAccessHttpUrl(url.split(',')[0]);
    //获取文件后缀
    let suffix = url.substring(url.lastIndexOf('.') + 1);
    if (suffix === "xlsx" || suffix === "xls" || suffix === 'docx' || suffix === 'doc') {
        window.open("https://view.officeapps.live.com/op/view.aspx?src=" + url, '_blank');
    }
    else {
        window.open(url, '_blank');
    }
}
export { render, downloadFile, viewFile };
